#include "public.h"
#include <stdio.h>
#include "seg.h"
#include "timer.h"
#include "ds1302.h"

//数码管显示：显示位置,字符段码,显示的字符
uchar pos = 0,seg_str[16],seg_buf[8];

//ds1302
extern uchar DS1302_time[]; //时间
uchar show_mode = 1; //显示模式：1时间，2日期
uint sm_count = 0; //模式切换计数器

//其他变量



//*******************函数声明*******************
void seg_proc();
void ds1302_proc();

//*******************main*******************
void main() {
	sys_init();
	timer1_init();
	DS1302_init();
	
	while(1) {
		ds1302_proc();
		seg_proc();
	}
}

//*******************中断服务函数*******************
void t1_isr() interrupt 3 {
	TH1 = (65535-2000)/256;
	TL1 = (65535-2000)%256;
	
	//数码管显示
	seg_disp(pos, seg_buf);
	if(++pos >= 8) pos = 0;
}


//*******************ds1302*******************
void ds1302_proc() {
	DS1302_getTime();
}


//*******************数码管*******************
void show_mode_tran() {
	//时间显示模式切换
	if(++sm_count >= 10000) {
		switch(show_mode) {  
			case 1: 
				show_mode = 2;
				sm_count = 8000;
			break;
			case 2: 
				show_mode = 1;
				sm_count = 0;
			break;
		}
	}	
}

void seg_proc() {
	show_mode_tran();
	
	//待显示的字符数组
	switch(show_mode) {
		case 1:
			sprintf(seg_str, "%02d-%02d-%02d",
			(uint)DS1302_time[4], (uint)DS1302_time[5], (uint)DS1302_time[6]);
		break;
		case 2:
			sprintf(seg_str, "%02d-%02d-%02d",
			(uint)DS1302_time[0], (uint)DS1302_time[2], (uint)DS1302_time[3]);
		break;
	}
	
	//将字符转换为段码
	seg_tran(seg_str, seg_buf);
}


